在 SwiftUI 中,PreviewProvider 可以讓我們在 Xcode 的預覽中即時查看 SwiftUI 視圖的外觀。為了讓 Alert 和 Sheet 有預覽效果,我們需要在 ContentView 中添加 PreviewProvider。
以下是包含 Alert 和 Sheet 的完整範例,並且加入了預覽功能。
import SwiftUI
struct AlertContentView: View {
@State private var showAlert = false
@State private var showSheet = false
var body: some View {
VStack(spacing: 20) {
Button("顯示提示框") {
showAlert = true
}
.alert("提示", isPresented: $showAlert) {
Button("確認", role: .cancel) {}
} message: {
Text("這是一個警告訊息。")
}
Button("顯示彈出視窗") {
showSheet = true
}
.sheet(isPresented: $showSheet) {
SheetView()
}
}
.padding()
}
}
struct SheetView: View {
// 使用 Environment 取得 presentationMode 來控制視窗的顯示與隱藏
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("這是彈出視窗內容")
.font(.title)
Button("關閉") {
// 關閉 Sheet 視窗
presentationMode.wrappedValue.dismiss()
}
.padding()
}
}
}
// 預覽部分
struct AlertContentView_Previews: PreviewProvider {
static var previews: some View {
AlertContentView()
}
}
ContentView:這是主要的視圖,包含兩個按鈕,一個用來顯示 Alert,另一個用來顯示 Sheet。
SheetView:這是彈出視窗的內容視圖,當 Sheet 彈出時顯示。可以進一步添加功能,如關閉按鈕來管理彈窗的顯示狀態。
ContentView_Previews:這是用來提供 Xcode 預覽的結構體。PreviewProvider 協定要求我們實作一個 previews 靜態屬性,返回要預覽的視圖。
透過這個 PreviewProvider,我們可以在 Xcode 的預覽畫面中即時查看 ContentView 的外觀,測試 Alert 和 Sheet 按鈕的交互效果。


